/**
 * 书签管理系统后端服务入口文件
 * 负责配置和启动Express服务器，连接MongoDB数据库，注册中间件和路由
 */

// 导入必要的依赖
const express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');
const bodyParser = require('body-parser');
const path = require('path');
require('dotenv').config();

// 导入路由
const bookmarkRoutes = require('./routes/bookmarks');
const categoryRoutes = require('./routes/categories');
const authRoutes = require('./routes/auth');

// 创建Express应用实例
const app = express();

// 配置中间件
app.use(cors()); // 启用CORS，允许跨域请求
app.use(bodyParser.json({ limit: '50mb' })); // 解析JSON请求体，设置较大的限制以支持大型书签导入
app.use(bodyParser.urlencoded({ extended: true, limit: '50mb' }));
app.use(express.static(path.join(__dirname, 'public'))); // 提供静态文件服务

// 连接到MongoDB数据库
mongoose.connect(process.env.MONGODB_URI || 'mongodb://127.0.0.1:27017/bookmarkManager', {
  useNewUrlParser: true,
  useUnifiedTopology: true,
})
.then(() => console.log('MongoDB数据库连接成功'))
.catch(err => {
  console.error('MongoDB连接错误:', err);
  process.exit(1);
});

// 监听MongoDB连接事件
mongoose.connection.on('error', err => {
  console.error('MongoDB连接错误:', err);
});

mongoose.connection.on('disconnected', () => {
  console.log('MongoDB连接断开');
});

// 全局错误处理中间件
app.use((err, req, res, next) => {
  console.error('服务器错误:', err);
  res.status(500).json({
    success: false,
    message: '服务器内部错误',
    error: process.env.NODE_ENV === 'development' ? err.message : undefined
  });
});

// 注册API路由
app.use('/api/bookmarks', bookmarkRoutes);
app.use('/api/categories', categoryRoutes);
app.use('/api/auth', authRoutes);

// 定义服务器端口，默认为5000
const PORT = process.env.PORT || 5000;

// 启动服务器
app.listen(PORT, () => {
  console.log(`服务器运行在端口 ${PORT}`);
}); 